package com.macro.mall.ums.service.address;

import com.github.pagehelper.Page;
import com.macro.mall.ums.domain.MemberAddress;
import com.macro.mall.ums.entity.MemberAddressEntity;
import com.macro.mall.ums.service.address.bo.InsertMemberAddressInput;
import com.macro.mall.ums.service.address.bo.PagedQueryMemberAddressInput;
import com.macro.mall.ums.service.address.bo.UpdateMemberAddressInput;

import java.util.List;

/**
 * 会员收货地址Service
 *
 * @author xuyanjun
 * @date 2019-12-15
 */
public interface MemberAddressService {

    /**
     * 新增会员收货地址
     *
     * @param input input
     * @return 新增id
     */
    long insert(InsertMemberAddressInput input);

    /**
     * 修改会员收货地址
     *
     * @param input input
     */
    void update(UpdateMemberAddressInput input);

    /**
     * 删除会员收货地址
     *
     * @param id id
     */
    void delete(long id);

    /**
     * 根据Id获取会员收货地址
     *
     * @param id id
     * @return 会员收货地址
     */
    MemberAddressEntity getById(long id);

    /**
     * 根据会员Id获取会员收货地址
     *
     * @param memberId 会员id
     * @return 会员收货地址集合
     */
    List<MemberAddressEntity> listByMemberId(long memberId);

    /**
     * 根据批量Id获取会员收货地址
     *
     * @param batchIds 批量ids
     * @return 会员收货地址集合
     */
    List<MemberAddressEntity> listByBatchIds(List<Long> batchIds);

    /**
     * 分页查询
     *
     * @param input input
     * @return 分页的会员收货地址
     */
    Page<MemberAddressEntity> pagedQuery(PagedQueryMemberAddressInput input);

    /**
     * 将实体对象转换成domain对象
     *
     * @param memberAddressEntity 实体
     * @return memberAddress
     */
    MemberAddress entityToDomain(MemberAddressEntity memberAddressEntity);

    /**
     * 将实体对象转换成domain对象
     *
     * @param memberAddressEntities 实体
     * @return memberAddresss
     */
    List<MemberAddress> entityToDomain(List<MemberAddressEntity> memberAddressEntities);

}